package tab;

/*
 AgileLang - A fourth generation language(http://www.agilelang.org).

 Copyright (C) 2013 Roderick Cusirramos (roderick20@hotmail.com)

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.*;
import javax.swing.*;
import javax.swing.plaf.basic.BasicButtonUI;


public class EyelashTab extends JPanel implements ActionListener {
    
    private final JTabbedPane      panelContenedor; //referencia al coponente contenedor, una vez asigado no cambia (final)
    private JLabel                      labelIcono; //icono de la pestaña
    private JLabel                       contenido; //texto de la pestaña
    private JButton                    botonCerrar; //el famoso botonCerrar ;)
    public String path="";
    
    public EyelashTab(final JTabbedPane panelContenedor) {
        
        super(new FlowLayout(FlowLayout.LEFT, 0, 0));
        
        //obtengo la referencia del tabbedPane contenedor (el puntero a..)
        this.panelContenedor=panelContenedor;
        setOpaque(false);
        
        labelIcono = new JLabel();
        labelIcono.setIcon(new ImageIcon(EyelashTab.class.getResource("file.png")));
  
        //obtengo el indice del JPanel al que fue agregado "esta" pestaña
        int i = panelContenedor.indexOfTabComponent(this);
        
        //Obtengo el titulo que le fue asignado al JPanel
        contenido = new JLabel() {
            public String getText() {
                //necesito el indice de nuevo porque este es el espacio de la nueva clase
                //para ello hago referencia a la clase contenedora de la que estoy ahora |
                int i = panelContenedor.indexOfTabComponent(EyelashTab.this); //  <---------|
                if (i != -1) {
                    path = panelContenedor.getTitleAt(i);
                    return (new File(path)).getName();
                }
                return null;
            }
        };
        
        //agregamos el icono y establecemos un borde, para crear una distancia
        //por default entre este y otros coponentes cercanos a el
        add(labelIcono);
        labelIcono.setBorder(BorderFactory.createEmptyBorder(0,0,0,5));
        
        //agregamos el texto de la pestaña y establecemos una
        //distancia por default entre este componente y los demas
        add(contenido);
        contenido.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));

        //el boton close
        botonCerrar = new JButton();
        botonCerrar.setIcon(new ImageIcon(EyelashTab.class.getResource("close.png")));
        int size = 15;
        botonCerrar.setPreferredSize(new Dimension(size, size));
        botonCerrar.setToolTipText("Cerrar esta pestaña");
        botonCerrar.setUI(new BasicButtonUI());
        //hacemos transparente su relleno
        botonCerrar.setContentAreaFilled(false);
        //No necesita ser enfocable
        botonCerrar.setFocusable(false);
        botonCerrar.setBorder(BorderFactory.createEtchedBorder());
        botonCerrar.setBorderPainted(false);
        //Efecto de enmarcado cuando el mouse pasa sobre el
        botonCerrar.addMouseListener(eventosRaton);
        botonCerrar.setRolloverEnabled(true);
        //Listener para obtener controlar los eventos del boton
        botonCerrar.addActionListener(this);
        //Nuestro cursor para el componente ;)
        botonCerrar.setCursor(CursorTab.getDefault());
        add(botonCerrar);
        //de nuevo un borde predeterminado
        setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
    }    
    
    public void filemodify(){        
        contenido.setFont(new Font("Serif", Font.BOLD, 12));
        contenido.updateUI();
    }
    
    public void save(){        
        contenido.setFont(new Font("Serif", Font.PLAIN, 12));
        contenido.updateUI();
    }
    
    public void actionPerformed(ActionEvent ev){
       Object o = ev.getSource();
       if (o==botonCerrar){
            //de nuevo el indice de ficha a la que pertenece "esta" pestaña
            int i = panelContenedor.indexOfTabComponent(this);
            if (i != -1) {
                //quitando el JPanel al que pertenece esta pestaña
                panelContenedor.remove(i);
            }
       }
   }    

//static final, ahorrando un poquito de RAM ;)
    private final static MouseListener eventosRaton= new MouseAdapter() {
        public void mouseEntered(MouseEvent e) {
            Component component = e.getComponent();
            //es un boton?
            if (component instanceof JButton) {
                //casting
                JButton button = (JButton) component;
                //el mouse lo señala, pintemos el marco del boton
                button.setBorderPainted(true);
            }
        }

        public void mouseExited(MouseEvent e) {
            Component component = e.getComponent();
            //es un boton?
            if (component instanceof JButton) {
                //casting
                JButton button = (JButton) component;
                //el mouse ya no lo señala, quite el marco del boton
                button.setBorderPainted(false);
            }
        }
    };
    
}